Прежде чем продолжать разрабатывать наше творение я приведу краткую справку
по MySQL, а точнее, коротко опишу типы данных mysql, функции и
особенности sql-запросов. Сам sql, я думаю, Вы знаете (если это не
так - то к вашим услугам соответствующий раздел про SQL на "Первых
шагах"! ;)
Я не буду описывать подробно все изобилие типов MySQL. Я уверен, что
это лишнее. Дело в том, что в mysql-е числовые и текстовые группы типов
очень многочисленны. Отличаются типы в этих группах размером в байтах и
возможными модификаторами. Подробности можно посмотреть в мануале в директории
Docs каталога с mysql-ем в разделе "7.3 Column types". Там
и английский знать особо не нужно - смотрите на название и цифры длины! ;)
Здесь я сделаю обзор самих групп типов данных - для быстрого введение.
MySQL поддерживает следующие типы/группы типов данных:
- Числовые. Возможные модификаторы: UNSIGNED для объявления
беззнаковости, ZEROFILL для заполнения лидирующих пробелов нулями
(имеется в виду внешний вид при выводе). Могут быть созданы как целые
(TINYINT, SMALLINT, INT, BIGINT и пр.), так и
числа с плавающей точкой (FLOAT, DOUBLE, REAL и пр.).
- Строковые. Возможные модификаторы: BINARY для объявления поля как
бинарного (любые коды хранимых символов), NATIONAL - модификатор по
умолчанию, - использование набора символов для сортировки, сравнения и пр.
Занятный модификатор. Отвечает за конструкцию SET-группы: SET
CHARACTER SET character_set_name | DEFAULT, где character_set_name
может принимать значение cp1251_koi8.
Однако эти установки
выставлены по умолчанию. Выходит, без модификатора результат тот же, что и с
ним. Я так понял, что эти фишки для будущего использования. Модификатор для
типа CHAR VARYING создает строковое поле переменной длины.
- BLOB-поля - поля для хранения двоичных данных.
Типы данных, не попавшие в предыдущие три группы:
- TIMESTAMP - поле хранит дату и время последнего изменения записи.
Это значит, что, добавив в таблицу поле типа TIMESTAMP (например,
воспользовавшись конструкцией ALTER TABLE table_name ADD COLUMN column_name
TIMESTAMP), Вы, не производя никаких изменений поля типа TIMESTAMP,
будете в нем иметь время последней операции с записью, влияющей на содержимое
строки таблицы.
- DATE, TIME, DATETIME - поля хранения даты, времени, и
того, и другого. Тут, я думаю все ясно.
- YEAR - поле, добавленное в версии 3.22, - для хранения года в
интервале с 1901 по 2155.
- ENUM - поле, хранящее одно из значений, указанных в списке при
создании (модификации структуры) таблицы, например, ALTER TABLE tab_name
ADD COLUMN col_enum ENUM('Ага', 'Угу', 'Ну его нафиг').
Теперь
поместить в поле col_enum одно из перечисленных значений можно так: INSERT INTO tab_name SET col_enum='Ага'
или
UPDATE tab_name SET col_enum=3.
В последнем случае в col_enum будет значение 'Ну его
нафиг'. Присвоение полю значения не из списка (например, col_enum=7
или col_enum='format c:') запишет в поле пустую строку (даже не
'NULL').
- тип SET в отличии от типа ENUM предназначен для хранения
списка значений, например,
ALTER TABLE tab_name ADD COLUMN col_set SET ('один','два','три','четыре')
Теперь изменим значение поля: UPDATE tab_name SET col_set='один' WHERE поле=значение
После такого запроса col_set будет содержать значение 'один'. UPDATE tab_name SET col_set=15
Здесь col_set содержит значение 'один,два,три,четыре'. Да,
именно строку с set-значениями, разделенными запятыми. Цифра 15
- это двоичное 1111. Каждый бит отвечает за свое значение в списке.
Например: 1 - 'del', 10 - 'file1.txt', 11 - 'del,file1.txt' и т.д. Как и в
случае с ENUM установка недопустимого значения записывает в поле пустую
строку.
В следующем шаге - краткий обзор функций MySQL, используемых в
SELECT-запросах и в условиях WHERE. Подробностями самого
SELECT-а мы займемся несколько позже, когда в целом реализуем первый
проект - книжную базу.